# i2pd

Guía de configuración de i2pd.

## Preparación

Copiar los ejemplos de los archivos de configuración:

    mkdir -p "${HOME}/.i2pd/keys"
    touch "${HOME}/.i2pd/tunnels.conf"
    cp /usr/doc/i2pd-VERSION/i2pd.conf "${HOME}/.i2pd"
    cp -R /usr/doc/i2pd-VERSION/certificates "${HOME}/.i2pd"
    chmod 700 "${HOME}/.i2pd"

Ejecutar i2pd:

    i2pd

## Configuración

### Opciones generales

| Opción       | Valor por defecto                                 | Descripción |
| ------------ | ------------------------------------------------- | ----------- |
| `conf`       | ~/.i2pd/i2pd.conf o /var/lib/i2pd/i2pd.conf       | Archivo de configuración. |
| `tunconf`    | ~/.i2pd/tunnels.conf o /var/lib/i2pd/tunnels.conf | Archivo de configuración de túneles. |
| `pidfile`    | ~/i2pd/i2pd.pid o /var/lib/i2pd/i2pd.pid          | Archivo de identificador de proceso. |
| `log`        | stdout                                            | Gestor de registros (file, stdout o syslog). |
| `logfile`    | ~/.i2pd/i2pd.log o /var/lib/i2pd/i2pd.log         | Archivo de registros (solo en modo file). |
| `loglevel`   | warn                                              | Nivel de registro de mensajes (debug, info, warn, error). |
| `logclftime` | false (deshabilitado)                             | Utiliza el formato CLF (Common Log Format) para la fecha y hora de los registros. |
| `datadir`    | /var/lib/i2pd                                     | Directorio para almacenar datos propios de i2pd. |
| `host`       | auto (si SSU2 está habilitado)                    | Dirección IP externa donde escuchará conexiones entrantes. |
| `port`       | auto (random)                                     | Puerto donde escuchará conexiones entrantes. |
| `daemon`     | false (deshabilitado)                             | Ejecuta i2pd en segundo plano. |
| `service`    | false (deshabilitado)                             | Utiliza la carpeta /var/lib/i2pd (en unix) o C:\ProgramData\i2pd (en Windows) para datadir. Es ignorado en otros sistema operativos. |
| `ifname`     | auto                                              | Nombre de la interfaz de red donde escuchará conexiones entrantes desde IPv4 e IPv6. |
| `ifname4`    | auto (si ipv4 está habilitado)                    | Nombre de la interfaz de red donde solo escuchará conexiones entrantes desde IPv4. |
| `ifname6`    | auto (si ipv6 está habilitado)                    | Nombre de la interfaz de red donde solo escuchará conexiones entrantes desde IPv6. |
| `address4`   | auto (si ipv4 está habilitado)                    | Dirección IPv4 donde escuchará conexiones entrantes. |
| `address6`   | auto (si ipv6 está habilitado)                    | Dirección IPv6 donde escuchará conexiones entrantes. |
| `nat`        | true (habilitado)                                 | Permite conexiones entrantes desde internet. |
| `ipv4`       | true (habilitado)                                 | Permite comunicaciones a través de IPv4. |
| `ipv6`       | false (deshabilitado)                             | Permite comunicaciones a través de IPv6. |
| `notransit`  | false (deshabilitado)                             | Deshabilita el enrutamiento de tráfico de terceros de la red I2P. |
| `floodfill`  | false (deshabilitado)                             | Permite convertirse en un nodo de enrutamiento dentro de la red I2P. |
| `bandwidth`  | L (32 KBps)                                       | Limite de ancho de banda dedicado para i2pd. |
| `share`      | 100                                               | Porcentaje máximo de ancho de banda de transmisión. |
| `family`     | ----                                              | Nombre de la familia al que pertenece el router. |
| `netid`      | 2                                                 | Identificador de red de conexión a I2P. |

> Un nodo de enrutamiento transmite información sobre la red I2P para mantenerla actualizada. Un router consume y transporta tráfico de la red I2P.

### Opciones del protocolo NTCP2

| Opción            | Valor por defecto                   | Descripción |
| ----------------- | ----------------------------------- | ----------- |
| `ntcp2.enabled`   | true (habilitado)                   | Habilita el protocolo de transporte TCP NTCP2 (como prioridad para conexiones de salida). |
| `ntcp2.published` | true (habilitado)                   | Permite conexiones entrantes NTCP2 (si el NAT/Firewall lo permite). |
| `ntcp2.port`      | auto (puerto de la sección general) | Puerto donde escuchará conexiones entrantes NTCP2. |
| `ntcp2.addressv6` | :: (cualquier dirección IPv6)       | Dirección IPv6 externa donde escuchará conexiones entrantes NTCP2. |
| `ntcp2.proxy`     | ----                                | Establece un servidor proxy para NTCP2. |

### Opciones del protocolo SSU2

| Opción           | Valor por defecto                   | Descripción |
| ---------------- | ----------------------------------- | ----------- |
| `ssu2.enabled`   | true (habilitado)                   | Habilita el protocolo de transporte UDP SSU2 (para conexiones de entrada y salida). |
| `ssu2.published` | true (habilitado)                   | Permite conexiones entrantes SSU2. |
| `ssu2.port`      | auto (puerto de la sección general) | Puerto donde escuchará conexiones entrantes SSU2. |
| `ssu2.proxy`     | ----                                | Establece un servidor proxy UDP SOCKS5 para SSU2. |
| `ssu2.mtu4`      | auto (ajuste automático)            | Máxima unidad de transferencia de datos para IPv4. |
| `ssu2.mtu6`      | auto (ajuste automático)            | Máxima unidad de transferencia de datos para IPv6. |

### Opciones del monitor web HTTP

| Opción               | Valor por defecto       | Descripción |
| -------------------- | ----------------------- | ----------- |
| `http.enabled`       | true (habilitado)       | Habilita la interfaz web de monitoreo de i2pd. |
| `http.address`       | 127.0.0.1               | Dirección IP donde escuchará el servidor HTTP de la interfaz web. |
| `http.port`          | 7070                    | Puerto donde escuchará el servidor HTTP de la interfaz web. |
| `http.hostname`      | localhost               | Nombre de host esperado para la interfaz web. |
| `http.webroot`       | /                       | Ruta raíz para la interfaz web. |
| `http.auth`          | false (deshabilitado)   | Habilita la autenticación básica para acceder a la interfaz web. |
| `http.user`          | i2pd                    | Nombre de usuario para acceder a la interfaz web. |
| `http.pass`          | ----                    | Contraseña para acceder a la interfaz web. |
| `http.strictheaders` | true (habilitado)       | Habilita la comprobación estricta de los encabezados del servidor HTTP de la interfaz web. |
| `http.showTotalTCSR` | false (deshabilitado)   | Muestra el porcentaje total de creación exitosa de túneles en la interfaz web. |
| `http.lang`          | english                 | Lenguaje de la interfaz web. |

* <http://127.0.0.1:7070>

### Opciones del proxy HTTP

| Opción                              | Valor por defecto   | Descripción |
| ----------------------------------- | ------------------- | ----------- |
| `httpproxy.enabled`                 | true (habilitado)   | Habilita el proxy HTTP para navegar por internet en la red I2P. |
| `httpproxy.address`                 | 127.0.0.1           | Dirección IP donde escuchará el proxy HTTP. |
| `httpproxy.port`                    | 4444                | Puerto donde escuchará el proxy HTTP. |
| `httpproxy.addresshelper`           | true (habilitado)   | Habilita el servicio de salto (jump) para solucionar consultas fallidas. |
| `httpproxy.keys`                    | http-proxy-keys.dat | |
| `httpproxy.signaturetype`           | 7                   | |
| `httpproxy.inbound.length`          | 3                   | |
| `httpproxy.inbound.quantity`        | 5                   | |
| `httpproxy.inbound.lengthVariance`  | 0                   | |
| `httpproxy.outbound.length`         | 3                   | |
| `httpproxy.outbound.quantity`       | 5                   | |
| `httpproxy.outbound.lengthVariance` | 0                   | |
| `httpproxy.outproxy`                | ----                | |
| `httpproxy.i2cp.leaseSetType`       | 3                   | |
| `httpproxy.i2cp.leaseSetEncType`    | 0,4                 | |

### Opciones del proxy SOCKS

| Opción                               | Valor por defecto     | Descripción |
| ------------------------------------ | --------------------- | ----------- |
| `socksproxy.enabled`                 | true (habilitado)     | Habilita el proxy SOCKS para conexiones anónimas en la red I2P con la mayoría de aplicaciones. |
| `socksproxy.address`                 | 127.0.0.1             | Dirección IP donde escuchará el proxy SOCKS. |
| `socksproxy.port`                    | 4447                  | Puerto donde escuchará el proxy SOCKS. |
| `socksproxy.keys`                    | socks-proxy-keys.dat  | |
| `socksproxy.signaturetype`           | 7                     | |
| `socksproxy.inbound.length`          | 3                     | |
| `socksproxy.inbound.quantity`        | 5                     | |
| `socksproxy.inbound.lengthVariance`  | 0                     | |
| `socksproxy.outbound.length`         | 3                     | |
| `socksproxy.outbound.quantity`       | 5                     | |
| `socksproxy.outbound.lengthVariance` | 0                     | |
| `socksproxy.outproxy.enabled`        | false (deshabilitado) | |
| `socksproxy.outproxy`                | 127.0.0.1             | |
| `socksproxy.outproxyport`            | 9050                  | |
| `socksproxy.i2cp.leaseSetType`       | 3                     | |
| `socksproxy.i2cp.leaseSetEncType`    | 0,4                   | |

### Opciones de la API SAM

| Opción             | Valor por defecto | Descripción |
| ------------------ | ----------------- | ----------- |
| `sam.enabled`      | true (habilitado) | Habilita el servicio de la API SAM orientada a mensajes dentro de la red I2P. |
| `sam.address`      | 127.0.0.1         | Dirección IP donde escuchará el servicio. |
| `sam.port`         | 7656              | Puerto TCP donde escuchará el servicio. |
| `sam.portudp`      | 7655              | Puerto UDP donde escuchará el servicio. |
| `sam.singlethread` | true (habilitado) | Ejecuta el servicio en un solo subproceso. |

### Opciones de la API BOB

| Opción        | Valor por defecto     | Descripción |
| ------------- | --------------------- | ----------- |
| `bob.enabled` | false (deshabilitado) | Habilita el servicio de la API BOB para realizar conexiones a I2P con opciones más avanzadas. |
| `bob.address` | 127.0.0.1             | Dirección IP donde escuchará el servicio. |
| `bob.port`    | 2827                  | Puerto donde escuchará el servicio. |

### Opciones del protocolo I2CP

| Opción              | Valor por defecto     | Descripción |
| ------------------- | --------------------- | ----------- |
| `i2cp.enabled`      | false (deshabilitado) | Habilita el protocolo de cliente de I2P para mensajes seguras y asíncronas sobre un único socket TCP en I2P sin requerir el uso directo de una API. |
| `i2cp.address`      | 127.0.0.1             | Dirección IP donde escuchará el servicio. |
| `i2cp.port`         | 7654                  | Puerto donde escuchará el servicio (ignorado en Android). |
| `i2cp.singlethread` | true (habilitado)     | Ejecuta el servicio en un solo subproceso. |

### Opciones de la API I2PControl

| Opción                | Valor por defecto     | Descripción |
| --------------------- | --------------------- | ----------- |
| `i2pcontrol.enabled`  | false (deshabilitado) | Habilita el servicio HTTP de la API I2PControl para interactuar con el router de I2P. |
| `i2pcontrol.address`  | 127.0.0.1             | Dirección IP donde escuchará el servicio. |
| `i2pcontrol.port`     | 7650                  | Puerto donde escuchará el servicio. |
| `i2pcontrol.password` | itoopie               | Contraseña de acceso a la API. |
| `i2pcontrol.cert`     | i2pcontrol.crt.pem    | Certificado para configurar el servidor de la API a HTTPS. |
| `i2pcontrol.key`      | i2pcontrol.key.pem    | Clave privada para configurar el servidor de la API a HTTPS. |

### Opciones UPNP

| Opción         | Valor por defecto            | Descripción |
| -------------- | ---------------------------- | ----------- |
| `upnp.enabled` | false (deshabilitado en CLI) | Habilita UPnP para abrir puertos en el cortafuegos. |
| `upnp.name`    | I2Pd                         | Nombre que aparecerá en la lista de reenvío de UPnP. |

### Opciones de criptografía

| Opción                   | Valor por defecto               | Descripción |
| ------------------------ | ------------------------------- | ----------- |
| `precomputation.elgamal` | false (deshabilitado en x86-64) | Habilita la tabla de datos precalculados para el algoritmo de cifrado de mensajes de I2P ElGamal. |

### Opciones de servidores de resembrado

| Opción             | Valor por defecto                   | Descripción |
| ------------------ | ----------------------------------- | ----------- |
| `reseed.verify`    | false (deshabilitado)               | Habilita la verificación de los archivos descargados desde los servidores de resembrado para obtener información actualizada sobre otros nodos de la red I2P. |
| `reseed.urls`      | auto (lista por defecto)            | Lista de URLs de servidores de resembrado donde solicitará información actualizada sobre otros nodos de la red I2P. |
| `reseed.yggurls`   | auto (lista por defecto)            | Lista de URLs de servidores de resembrado donde solicitará información actualizada sobre otros nodos de la red I2P desde la red Yggdrasil. |
| `reseed.file`      | ----                                | Similar a `reseed.urls` pero desde un archivo externo que contiene una lista de servidores de resembrado. |
| `reseed.zipfile`   | ----                                | Similar a `reseed.file` pero desde un archivo externo comprimido que contiene una lista de servidores de resembrado. |
| `reseed.threshold` | 25                                  | Número mínimo de enrutadores conocidos antes de solicitar información actualizada sobre otros nodos de la red I2P. |
| `reseed.floodfill` | ---- (si floodfill está habilitado) | Habilita el proceso de resembrado solo entre nodos. |
| `reseed.proxy`     | ----                                | Establece un servidor proxy para el proceso de resembrado. |

### Opciones de la libreta de nombres y direcciones

| Opción                      | Valor por defecto        | Descripción |
| --------------------------- | ------------------------ | ----------- |
| `addressbook.enabled`       | true (habilitado)        | Habilita las búsquedas en la libreta de direcciones y suscripciones. |
| `addressbook.defaulturl`    | auto (URL por defecto)   | URL de la libreta de direcciones para la configuración inicial. |
| `addressbook.subscriptions` | auto (lista por defecto) | Lista de URLs para suscribirse a otras libretas de direcciones. |
| `addressbook.hostsfile`     | ----                     | Archivo externo que servirá de libreta de direcciones. |

> Una libreta de direcciones asocia una dirección criptográfica de I2P en base32 o base64 a una dirección legible.

### Opciones de limitación

| Opción                  | Valor por defecto  | Descripción |
| ----------------------- | ------------------ | ----------- |
| `limits.transittunnels` | 5000               | Número máximo de túneles de tránsito que se pueden mantener simultáneamente (el doble si floodfill está habilitado). |
| `limits.openfiles`      | 0 (auto)           | Número máximo de descriptores de archivos abiertos. |
| `limits.coresize`       | 0 (auto)           | Tamaño máximo en Kb del archivo de núcleo que se genera en caso de fallos o errores. |
| `limits.zombies`        | 0                  | Porcentaje mínimo de túneles creados con éxito donde pausará la limpieza de túneles. |

### Opciones de confianza

| Opción          | Valor por defecto     | Descripción |
| --------------- | --------------------- | ----------- |
| `trust.enabled` | false (deshabilitado) | Habilita las opciones de confianza. |
| `trust.family`  | ----                  | Nombre de la familia de enrutadores en la que solo puede realizar conexiones a I2P. |
| `trust.routers` | ----                  | Lista de enrutadores en la que solo puede realizar conexiones a I2P. |
| `trust.hidden`  | false (deshabilitado) | Oculta el router de otros enrutadores. |

### Opciones de exploración de túneles

| Opción                          | Valor por defecto | Descripción |
| ------------------------------- | ----------------- | ----------- |
| `exploratory.inbound.length`    | 2                 | Longitud máxima de los túneles de entrada exploratorios. |
| `exploratory.inbound.quantity`  | 3                 | Cantidad máxima de túneles de entrada exploratorios que se crearán. |
| `exploratory.outbound.length`   | 2                 | Longitud máxima de los túneles de salida exploratorios. |
| `exploratory.outbound.quantity` | 3                 | Cantidad máxima de túneles de salida exploratorios que se crearán. |

> Ajustar estos valores mejora la capacidad de descubrir nuevos nodos y construir rutas de comunicación, pero puede consumir más recursos y aumentar la latencia.

### Opciones de sincronización del tiempo

| Opción                    | Valor por defecto        | Descripción |
| ------------------------- | ------------------------ | ----------- |
| `nettime.enabled`         | false (deshabilitado)    | Habilita la sincronización del tiempo del router i2pd. |
| `nettime.ntpservers`      | auto (lista por defecto) | Lista de servidores NTP para sincronizar el tiempo. |
| `nettime.ntpsyncinterval` | 72                       | Intervalo de sincronización del tiempo en horas. |
| `nettime.frompeer`        | true (habilitado)        | Habilita la sincronización del tiempo del router a través de otros routers. |

### Opciones de persistencia de la información de la red

| Opción                | Valor por defecto | Descripción |
| --------------------- | ----------------- | ----------- |
| `persist.profiles`    | true (habilitado) | Habilita almacenar en la unidad de almacenamiento información sobre otros routers para crear estrategias de conectividad en I2P. |
| `persist.addressbook` | true (habilitado) | Habilita almacenar en la unidad de almacenamiento la libreta de direcciones y suscripciones. |

### Opciones de transporte de red en malla

| Opción                    | Valor por defecto     | Descripción |
| ------------------------- | --------------------- | ----------- |
| `meshnets.yggdrasil`      | false (deshabilitado) | Habilita la conectividad a través de la red Yggdrasil. |
| `meshnets.yggaddress`     | ----                  | Dirección IP y puerto donde escuchará conexiones de la red Yggdrasil. |

## Configuración de túneles I2P

## Referencias

* [Una breve introducción de cómo funciona I2P.](https://geti2p.net/es/docs/how/intro)
* [Introducción al Proyecto de Internet Invisible (I2P).](https://geti2p.net/es/about/intro)
* [i2pd - A full-featured C++ implementation of I2P client.](https://i2pd.website)
* [i2pd documentation.](https://i2pd.readthedocs.io/en/latest)
* [Wikipedia - Common Log Format.](https://es.wikipedia.org/wiki/Common_Log_Format)
* [I2P - Introducción al los Transportes.](https://geti2p.net/es/docs/transport)
* [I2P: Un sistema escalable para las comunicaciones anónimas.](https://geti2p.net/es/docs/how/tech-intro)
* [I2P - UDP Seguro Semifiable (SSU).](https://geti2p.net/es/docs/transport/ssu)
* [I2PTunnel](https://geti2p.net/es/docs/api/i2ptunnel)
* [I2P - Libreta de nombres y direcciones.](https://geti2p.net/es/docs/naming)
* [IBM - SOCKS](https://www.ibm.com/docs/es/i/7.5?topic=concepts-socks)
* [I2P - Desarrollo de aplicaciones.](https://geti2p.net/es/get-involved/develop/applications)
* [I2P - I2CP](https://geti2p.net/es/docs/protocol/i2cp)
* [I2P - Pila de protocolos.](https://geti2p.net/es/docs/protocol)
* [I2P - Servidores de resembrado.](https://geti2p.net/es/docs/reseed)
* [I2P - Libreta de nombres y direcciones.](https://geti2p.net/es/docs/naming)
* [Yggdrasil](https://yggdrasil-network.github.io)
* [I2P - Perfilado y selección de pares.](https://geti2p.net/es/docs/how/peer-selection)
* [I2P - Enrutamiento de túnel.](https://geti2p.net/es/docs/how/tunnel-routing)
* [I2P - Implementación de túnel.](https://geti2p.net/es/docs/tunnels/implementation)
